/**
 * 字符串的最大公因
 * 对于字符串 s 和 t，只有在 s = t + t + t + ... + t + t（t 自身连接 1 次或多次）时，我们才认定 “t 能除尽 s”。
 * 给定两个字符串 str1 和 str2 。返回 最长字符串 x，要求满足 x 能除尽 str1 且 x 能除尽 str2 。
 */
var gcdOfStrings = function(str1, str2) {
    /**
     * 1. 如果两个字符串长度相等，那么只要判断两个字符串是否相等即可
     * 2. 如果两个字符串长度不相等，那么只要判断两个字符串是否能够拼接成相同的字符串即可
     * 
     * len1 % i === 0 && len2 % i === 0 说明 i 是两个字符串的公约数
     * 公约数：两个或多个整数公有约数，即能同时整除这几个整数的整数
     * 
     * str1.substring(0, gcd) 是两个字符串的最大公因
     */
    if (str1 + str2 !== str2 + str1)  return '';
    let len1 = str1.length;
    let len2 = str2.length;
    let len = Math.max(len1, len2);
    let gcd = 0;
    for (let i = 1; i <= len; i++) {
        if (len1 % i === 0 && len2 % i === 0) {
            gcd = i;
        }
    }
    let str = str1.substring(0, gcd);
    return str
};